/** @file
 *****************************************************************************

 Implementation of interfaces for initializing MNT6.

 See mnt6753_init.hpp .

 *****************************************************************************
 * @author     This file is part of libff, developed by SCIPR Lab
 *             and contributors (see AUTHORS).
 * @copyright  MIT license (see LICENSE file)
 *****************************************************************************/

#include <libff/algebra/curves/mnt753/mnt6753/mnt6753_g1.hpp>
#include <libff/algebra/curves/mnt753/mnt6753/mnt6753_g2.hpp>
#include <libff/algebra/curves/mnt753/mnt6753/mnt6753_init.hpp>

namespace libff {

//bigint<mnt6753_r_limbs> mnt6753_modulus_r = mnt46753_modulus_B;
//bigint<mnt6753_q_limbs> mnt6753_modulus_q = mnt46753_modulus_A;

mnt6753_Fq3 mnt6753_twist;
mnt6753_Fq3 mnt6753_twist_coeff_a;
mnt6753_Fq3 mnt6753_twist_coeff_b;
mnt6753_Fq mnt6753_twist_mul_by_a_c0;
mnt6753_Fq mnt6753_twist_mul_by_a_c1;
mnt6753_Fq mnt6753_twist_mul_by_a_c2;
mnt6753_Fq mnt6753_twist_mul_by_b_c0;
mnt6753_Fq mnt6753_twist_mul_by_b_c1;
mnt6753_Fq mnt6753_twist_mul_by_b_c2;
mnt6753_Fq mnt6753_twist_mul_by_q_X;
mnt6753_Fq mnt6753_twist_mul_by_q_Y;

bigint<mnt6753_q_limbs> mnt6753_ate_loop_count;
bool mnt6753_ate_is_loop_count_neg;
bigint<6*mnt6753_q_limbs> mnt6753_final_exponent;
bigint<mnt6753_q_limbs> mnt6753_final_exponent_last_chunk_abs_of_w0;
bool mnt6753_final_exponent_last_chunk_is_w0_neg;
bigint<mnt6753_q_limbs> mnt6753_final_exponent_last_chunk_w1;

void init_mnt6753_params()
{
    typedef bigint<mnt6753_r_limbs> bigint_r;
    typedef bigint<mnt6753_q_limbs> bigint_q;

    assert(sizeof(mp_limb_t) == 8 || sizeof(mp_limb_t) == 4); // Montgomery assumes this

    /* parameters for scalar field Fr */
    mnt6753_modulus_r = bigint_r("41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888253786114353726529584385201591605722013126468931404347949840543007986327743462853720628051692141265303114721689601");
    assert(mnt6753_Fr::modulus_is_valid());
    if (sizeof(mp_limb_t) == 8)
    {
        mnt6753_Fr::Rsquared = bigint_r("3905329767828791615502162626850211818655714094458690120430986575792677496633802118724780745619552999481121157852051288948780064150889938934414916554522736667272858589954728849781314241493825915233155383114266348177232527200456");
        mnt6753_Fr::Rcubed = bigint_r("37585233426682165294065702410202415171476938145667339674403960805833165033715513237837083555904292153853777922114133104918156213519695206603971179794826432236755764454444622189193631114536609372479504766361480176984626948994196");
        mnt6753_Fr::inv = 0xf2044cfbe45e7fff;
    }
    if (sizeof(mp_limb_t) == 4)
    {
        mnt6753_Fr::Rsquared = bigint_r("3905329767828791615502162626850211818655714094458690120430986575792677496633802118724780745619552999481121157852051288948780064150889938934414916554522736667272858589954728849781314241493825915233155383114266348177232527200456");
        mnt6753_Fr::Rcubed = bigint_r("37585233426682165294065702410202415171476938145667339674403960805833165033715513237837083555904292153853777922114133104918156213519695206603971179794826432236755764454444622189193631114536609372479504766361480176984626948994196");
        mnt6753_Fr::inv = 0xe45e7fff;
    }
    mnt6753_Fr::num_bits = 753;
    mnt6753_Fr::euler = bigint_r("20949245483959476701172107395620318564085354959976974535891751460512676406285553386529446881895169460709035485944126893057176863264792192600795802861006563234465702173974920271503993163871731426860314025846070632651557360844800");
    mnt6753_Fr::s = 15;
    mnt6753_Fr::t = bigint_r("1278640471433073529124274133033466709233725278318907137200424283478556909563327233064541435662546964154604216671394463687571830033251476599169665701965732619291119517454523942352538645255842982596454713491581459512424155325");
    mnt6753_Fr::t_minus_1_over_2 = bigint_r("639320235716536764562137066516733354616862639159453568600212141739278454781663616532270717831273482077302108335697231843785915016625738299584832850982866309645559758727261971176269322627921491298227356745790729756212077662");
    mnt6753_Fr::multiplicative_generator = mnt6753_Fr("17");
    mnt6753_Fr::root_of_unity = mnt6753_Fr("40577822398412982719876671814347622311725878559400100565221223860226396934830112376659822430317692232440883010225033880793828874730711721234325694240460855741763791540474706150170374090550695427806583236301930157866709353840964");
    mnt6753_Fr::nqr = mnt6753_Fr("13");
    mnt6753_Fr::nqr_to_t = mnt6753_Fr("18017781208150291467483603956987567350418056191877119616553128888924963195174389973716060278346059199161001506497199268678284023657157367321346359874121888331150637273273499500012599908057395792036980306166250353261196001983326");
    mnt6753_Fr::small_subgroup_defined = true;
    mnt6753_Fr::small_subgroup_base = 5;
    mnt6753_Fr::small_subgroup_power = 2;
    mnt6753_Fr::full_root_of_unity = mnt6753_Fr("12249458902762217747626832919710926618510011455364963726393752854649914979954138109976331601455448780251166045203053508523342111624583986869301658366625356826888785691823710598470775453742133593634524619429629803955083254436531");

        /* parameters for base field Fq */
    mnt6753_modulus_q = bigint_q("41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160001");
    assert(mnt6753_Fq::modulus_is_valid());
    if (sizeof(mp_limb_t) == 8)
    {
        mnt6753_Fq::Rsquared = bigint_q("528294247489794478830892053472659225778251862527177273996458536178202249935611532598626300863882178545714358789568805911817755538413250244866201145158388475219888075448690235278457757610027799964891022754525136858589282224337");
        mnt6753_Fq::Rcubed = bigint_q("41633340690057738012868713380844953084100062694720651354492878278511227226750918309707975231298706403293537406447047613688567102129544491565970474558910742579333982008790051581932943967272974145862229340445509069597750977867213");
        mnt6753_Fq::inv = 0xc90776e23fffffff;
    }
    if (sizeof(mp_limb_t) == 4)
    {
        mnt6753_Fq::Rsquared = bigint_q("528294247489794478830892053472659225778251862527177273996458536178202249935611532598626300863882178545714358789568805911817755538413250244866201145158388475219888075448690235278457757610027799964891022754525136858589282224337");
        mnt6753_Fq::Rcubed = bigint_q("41633340690057738012868713380844953084100062694720651354492878278511227226750918309707975231298706403293537406447047613688567102129544491565970474558910742579333982008790051581932943967272974145862229340445509069597750977867213");
        mnt6753_Fq::inv = 0x3fffffff;
    }
    mnt6753_Fq::num_bits = 753;
    mnt6753_Fq::euler = bigint_q("20949245483959476701172107395620318564085354959976974535891751460512676406285553386529446881895169460709035485944229238661586528745796927534848120927398198082860708162675032220735209068923199234805967859529954082110392238080000");
    mnt6753_Fq::s = 30;
    mnt6753_Fq::t = bigint_q("39021010480745652133919498688765463538626870065884617224134041854204007249857398469987226430131438115069708760723898631821547688442835449306011425196003537779414482717728302293895201885929702287178426719326440397855625");
    mnt6753_Fq::t_minus_1_over_2 = bigint_q("19510505240372826066959749344382731769313435032942308612067020927102003624928699234993613215065719057534854380361949315910773844221417724653005712598001768889707241358864151146947600942964851143589213359663220198927812");
    mnt6753_Fq::multiplicative_generator = mnt6753_Fq("17");
    mnt6753_Fq::root_of_unity = mnt6753_Fq("5431548564651772770863376209190533321743766006080874345421017090576169920304713950094628043692772801995471539849411522704471393987882883355624697206026582300050878644000631322086989454860102191886653186986980927065212650747291");
    mnt6753_Fq::nqr = mnt6753_Fq("11");
    mnt6753_Fq::nqr_to_t = mnt6753_Fq("2455648623996886823239043525257449186291028346951286533043435811383049212810466344106778185245641952169091724588148805743116830521168785810979147404935397979718632700247111860253397218855647411901871200410401085305824670182498");
    mnt6753_Fq::small_subgroup_defined = false;

    /* parameters for twist field Fq3 */
    mnt6753_Fq3::euler = bigint<3*mnt6753_q_limbs>("36776055735401198596149566891040341150864355261793901082207476636378901857455406847362955421512711068982899070952942876796502256120231923692360548451797966641729423632144283194366056893819521699824680902926319633595475253956179188037048769921534003254386873133435572121870276543691376211433236515444044274086982841959606460679416997279339435253839018607411225228325901444294625724021308769604510203246415385001950607231614037299675401617609236826508066547008715901460587732224289153891498243452932086585923807532638401861916540660501877748373772611246588261429058217316908575829896890392166197034013263652679605935850196472088091345224661432402763728357598979862235191695114240000");
    mnt6753_Fq3::s = 30;
    mnt6753_Fq3::t = bigint<3*mnt6753_q_limbs>("68500741823392358787636397203505674658090537901583874751268842511584799471228209971195003802911771589858269451098410183184784382805660224877969452090185073468330173999339869607921795721760991401643829239395111116758501630194818951258526686432834720712875711048833228874709972261807650721507587498881005261255396235658985489382253954707345804672388394563293504022668863542926731936673277559884842863765387581664976863621946493721893805298226395298741881823183439488449297346592488053984005457633979779828197895610031489025645965077917795159618878012982361505607251482674681722800986637160491565305764346667899947493989386543795636566774288997804305941532550342124393566875");
    mnt6753_Fq3::t_minus_1_over_2 = bigint<3*mnt6753_q_limbs>("34250370911696179393818198601752837329045268950791937375634421255792399735614104985597501901455885794929134725549205091592392191402830112438984726045092536734165086999669934803960897860880495700821914619697555558379250815097409475629263343216417360356437855524416614437354986130903825360753793749440502630627698117829492744691126977353672902336194197281646752011334431771463365968336638779942421431882693790832488431810973246860946902649113197649370940911591719744224648673296244026992002728816989889914098947805015744512822982538958897579809439006491180752803625741337340861400493318580245782652882173333949973746994693271897818283387144498902152970766275171062196783437");
    mnt6753_Fq3::non_residue = mnt6753_Fq("11");
    mnt6753_Fq3::nqr = mnt6753_Fq3(mnt6753_Fq("11"),mnt6753_Fq("0"),mnt6753_Fq("0"));
    mnt6753_Fq3::nqr_to_t = mnt6753_Fq3(mnt6753_Fq("22168644070733283197994897338612733221095941481265408161807376791727499343083607817089033595478370212662133368413166734396127674284827734481031659015434501966360165723728649019457855887066657739809176476252080335185730833468062"),mnt6753_Fq("0"),mnt6753_Fq("0"));
    mnt6753_Fq3::Frobenius_coeffs_c1[0] = mnt6753_Fq("1");
    mnt6753_Fq3::Frobenius_coeffs_c1[1] = mnt6753_Fq("24129022407817241407134263419936114379815707076943508280977368156625538709102831814843582780138963119807143081677569721953561801075623741378629346409604471234573396989178424163772589090105392407118197799904755622897541183052132");
    mnt6753_Fq3::Frobenius_coeffs_c1[2] = mnt6753_Fq("17769468560101711995209951371304522748355002843010440790806134764399814103468274958215310983651375801610927890210888755369611256415970113691066895445191924931148019336171640277697829047741006062493737919155152541323243293107868");
    mnt6753_Fq3::Frobenius_coeffs_c2[0] = mnt6753_Fq("1");
    mnt6753_Fq3::Frobenius_coeffs_c2[1] = mnt6753_Fq("17769468560101711995209951371304522748355002843010440790806134764399814103468274958215310983651375801610927890210888755369611256415970113691066895445191924931148019336171640277697829047741006062493737919155152541323243293107868");
    mnt6753_Fq3::Frobenius_coeffs_c2[2] = mnt6753_Fq("24129022407817241407134263419936114379815707076943508280977368156625538709102831814843582780138963119807143081677569721953561801075623741378629346409604471234573396989178424163772589090105392407118197799904755622897541183052132");

    /* parameters for Fq6 */
    mnt6753_Fq6::non_residue = mnt6753_Fq("11");
    mnt6753_Fq6::Frobenius_coeffs_c1[0] = mnt6753_Fq("1");
    mnt6753_Fq6::Frobenius_coeffs_c1[1] = mnt6753_Fq("24129022407817241407134263419936114379815707076943508280977368156625538709102831814843582780138963119807143081677569721953561801075623741378629346409604471234573396989178424163772589090105392407118197799904755622897541183052133");
    mnt6753_Fq6::Frobenius_coeffs_c1[2] = mnt6753_Fq("24129022407817241407134263419936114379815707076943508280977368156625538709102831814843582780138963119807143081677569721953561801075623741378629346409604471234573396989178424163772589090105392407118197799904755622897541183052132");
    mnt6753_Fq6::Frobenius_coeffs_c1[3] = mnt6753_Fq("41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160000");
    mnt6753_Fq6::Frobenius_coeffs_c1[4] = mnt6753_Fq("17769468560101711995209951371304522748355002843010440790806134764399814103468274958215310983651375801610927890210888755369611256415970113691066895445191924931148019336171640277697829047741006062493737919155152541323243293107868");
    mnt6753_Fq6::Frobenius_coeffs_c1[5] = mnt6753_Fq("17769468560101711995209951371304522748355002843010440790806134764399814103468274958215310983651375801610927890210888755369611256415970113691066895445191924931148019336171640277697829047741006062493737919155152541323243293107869");
    mnt6753_Fq6::my_Fp2::non_residue = mnt6753_Fq3::non_residue;

    /* choice of short Weierstrass curve and its twist */
    mnt6753_G1::coeff_a = mnt6753_Fq("11");
    mnt6753_G1::coeff_b = mnt6753_Fq("11625908999541321152027340224010374716841167701783584648338908235410859267060079819722747939267925389062611062156601938166010098747920378738927832658133625454260115409075816187555055859490253375704728027944315501122723426879114");
    mnt6753_twist = mnt6753_Fq3(mnt6753_Fq::zero(), mnt6753_Fq::one(), mnt6753_Fq::zero());
    mnt6753_twist_coeff_a = mnt6753_Fq3(mnt6753_Fq::zero(), mnt6753_Fq::zero(),
                                  mnt6753_G1::coeff_a);
    mnt6753_twist_coeff_b = mnt6753_Fq3(mnt6753_G1::coeff_b * mnt6753_Fq3::non_residue,
                                  mnt6753_Fq::zero(), mnt6753_Fq::zero());
    mnt6753_G2::twist = mnt6753_twist;
    mnt6753_G2::coeff_a = mnt6753_twist_coeff_a;
    mnt6753_G2::coeff_b = mnt6753_twist_coeff_b;
    mnt6753_twist_mul_by_a_c0 = mnt6753_G1::coeff_a * mnt6753_Fq3::non_residue;
    mnt6753_twist_mul_by_a_c1 = mnt6753_G1::coeff_a * mnt6753_Fq3::non_residue;
    mnt6753_twist_mul_by_a_c2 = mnt6753_G1::coeff_a;
    mnt6753_twist_mul_by_b_c0 = mnt6753_G1::coeff_b * mnt6753_Fq3::non_residue;
    mnt6753_twist_mul_by_b_c1 = mnt6753_G1::coeff_b * mnt6753_Fq3::non_residue;
    mnt6753_twist_mul_by_b_c2 = mnt6753_G1::coeff_b * mnt6753_Fq3::non_residue;
    mnt6753_twist_mul_by_q_X = mnt6753_Fq("17769468560101711995209951371304522748355002843010440790806134764399814103468274958215310983651375801610927890210888755369611256415970113691066895445191924931148019336171640277697829047741006062493737919155152541323243293107868");
    mnt6753_twist_mul_by_q_Y = mnt6753_Fq("41898490967918953402344214791240637128170709919953949071783502921025352812571106773058893763790338921418070971888458477323173057491593855069696241854796396165721416325350064441470418137846398469611935719059908164220784476160000");

    /* choice of group G1 */
    mnt6753_G1::G1_zero = mnt6753_G1(mnt6753_Fq::zero(),
                               mnt6753_Fq::one(),
                               mnt6753_Fq::zero());
    mnt6753_G1::G1_one = mnt6753_G1(mnt6753_Fq("16364236387491689444759057944334173579070747473738339749093487337644739228935268157504218078126401066954815152892688541654726829424326599038522503517302466226143788988217410842672857564665527806044250003808514184274233938437290"),
                              mnt6753_Fq("4510127914410645922431074687553594593336087066778984214797709122300210966076979927285161950203037801392624582544098750667549188549761032654706830225743998064330900301346566408501390638273322467173741629353517809979540986561128"),
                              mnt6753_Fq::one());

    mnt6753_G1::wnaf_window_table.resize(0);
    mnt6753_G1::wnaf_window_table.push_back(11);
    mnt6753_G1::wnaf_window_table.push_back(24);
    mnt6753_G1::wnaf_window_table.push_back(60);
    mnt6753_G1::wnaf_window_table.push_back(127);

    mnt6753_G1::fixed_base_exp_window_table.resize(0);
    // window 1 is unbeaten in [-inf, 3.96]
    mnt6753_G1::fixed_base_exp_window_table.push_back(1);
    // window 2 is unbeaten in [3.96, 9.67]
    mnt6753_G1::fixed_base_exp_window_table.push_back(4);
    // window 3 is unbeaten in [9.67, 25.13]
    mnt6753_G1::fixed_base_exp_window_table.push_back(10);
    // window 4 is unbeaten in [25.13, 60.31]
    mnt6753_G1::fixed_base_exp_window_table.push_back(25);
    // window 5 is unbeaten in [60.31, 146.07]
    mnt6753_G1::fixed_base_exp_window_table.push_back(60);
    // window 6 is unbeaten in [146.07, 350.09]
    mnt6753_G1::fixed_base_exp_window_table.push_back(146);
    // window 7 is unbeaten in [350.09, 844.54]
    mnt6753_G1::fixed_base_exp_window_table.push_back(350);
    // window 8 is unbeaten in [844.54, 1839.64]
    mnt6753_G1::fixed_base_exp_window_table.push_back(845);
    // window 9 is unbeaten in [1839.64, 3904.26]
    mnt6753_G1::fixed_base_exp_window_table.push_back(1840);
    // window 10 is unbeaten in [3904.26, 11309.42]
    mnt6753_G1::fixed_base_exp_window_table.push_back(3904);
    // window 11 is unbeaten in [11309.42, 24015.57]
    mnt6753_G1::fixed_base_exp_window_table.push_back(11309);
    // window 12 is unbeaten in [24015.57, 72288.57]
    mnt6753_G1::fixed_base_exp_window_table.push_back(24016);
    // window 13 is unbeaten in [72288.57, 138413.22]
    mnt6753_G1::fixed_base_exp_window_table.push_back(72289);
    // window 14 is unbeaten in [138413.22, 156390.30]
    mnt6753_G1::fixed_base_exp_window_table.push_back(138413);
    // window 15 is unbeaten in [156390.30, 562560.50]
    mnt6753_G1::fixed_base_exp_window_table.push_back(156390);
    // window 16 is unbeaten in [562560.50, 1036742.02]
    mnt6753_G1::fixed_base_exp_window_table.push_back(562560);
    // window 17 is unbeaten in [1036742.02, 2053818.86]
    mnt6753_G1::fixed_base_exp_window_table.push_back(1036742);
    // window 18 is unbeaten in [2053818.86, 4370223.95]
    mnt6753_G1::fixed_base_exp_window_table.push_back(2053819);
    // window 19 is unbeaten in [4370223.95, 8215703.81]
    mnt6753_G1::fixed_base_exp_window_table.push_back(4370224);
    // window 20 is unbeaten in [8215703.81, 42682375.43]
    mnt6753_G1::fixed_base_exp_window_table.push_back(8215704);
    // window 21 is never the best
    mnt6753_G1::fixed_base_exp_window_table.push_back(0);
    // window 22 is unbeaten in [42682375.43, inf]
    mnt6753_G1::fixed_base_exp_window_table.push_back(42682375);

    /* choice of group G2 */
    mnt6753_G2::G2_zero = mnt6753_G2(mnt6753_Fq3::zero(),
                               mnt6753_Fq3::one(),
                               mnt6753_Fq3::zero());
    mnt6753_G2::G2_one = mnt6753_G2(mnt6753_Fq3(mnt6753_Fq("46538297238006280434045879335349383221210789488441126073640895239023832290080310125413049878152095926176013036314720850781686614265244307536450228450615346834324267478485994670716807428718518299710702671895190475661871557310"),
                                       mnt6753_Fq("10329739935427016564561842963551883445915701424214177782911128765230271790215029185795830999583638744119368571742929964793955375930677178544873424392910884024986348059137449389533744851691082159233065444766899262771358355816328"),
                                       mnt6753_Fq("19962817058174334691864015232062671736353756221485896034072814261894530786568591431279230352444205682361463997175937973249929732063490256813101714586199642571344378012210374327764059557816647980334733538226843692316285591005879")),
                              mnt6753_Fq3(mnt6753_Fq("5648166377754359996653513138027891970842739892107427747585228022871109585680076240624013411622970109911154113378703562803827053335040877618934773712021441101121297691389632155906182656254145368668854360318258860716497525179898"),
                                       mnt6753_Fq("26817850356025045630477313828875808893994935265863280918207940412617168254772789578700316551065949899971937475487458539503514034928974530432009759562975983077355912050606509147904958229398389093697494174311832813615564256810453"),
                                       mnt6753_Fq("32332319709358578441696731586704495581796858962594701633932927358040566210788542624963749336109940335257143899293177116050031684054348958813290781394131284657165540476824211295508498842102093219808642563477603392470909217611033")),
                              mnt6753_Fq3::one());

    mnt6753_G2::wnaf_window_table.resize(0);
    mnt6753_G2::wnaf_window_table.push_back(5);
    mnt6753_G2::wnaf_window_table.push_back(15);
    mnt6753_G2::wnaf_window_table.push_back(39);
    mnt6753_G2::wnaf_window_table.push_back(109);

    mnt6753_G2::fixed_base_exp_window_table.resize(0);
    // window 1 is unbeaten in [-inf, 4.25]
    mnt6753_G2::fixed_base_exp_window_table.push_back(1);
    // window 2 is unbeaten in [4.25, 10.22]
    mnt6753_G2::fixed_base_exp_window_table.push_back(4);
    // window 3 is unbeaten in [10.22, 24.85]
    mnt6753_G2::fixed_base_exp_window_table.push_back(10);
    // window 4 is unbeaten in [24.85, 60.06]
    mnt6753_G2::fixed_base_exp_window_table.push_back(25);
    // window 5 is unbeaten in [60.06, 143.61]
    mnt6753_G2::fixed_base_exp_window_table.push_back(60);
    // window 6 is unbeaten in [143.61, 345.66]
    mnt6753_G2::fixed_base_exp_window_table.push_back(144);
    // window 7 is unbeaten in [345.66, 818.56]
    mnt6753_G2::fixed_base_exp_window_table.push_back(346);
    // window 8 is unbeaten in [818.56, 1782.06]
    mnt6753_G2::fixed_base_exp_window_table.push_back(819);
    // window 9 is unbeaten in [1782.06, 4002.45]
    mnt6753_G2::fixed_base_exp_window_table.push_back(1782);
    // window 10 is unbeaten in [4002.45, 10870.18]
    mnt6753_G2::fixed_base_exp_window_table.push_back(4002);
    // window 11 is unbeaten in [10870.18, 18022.51]
    mnt6753_G2::fixed_base_exp_window_table.push_back(10870);
    // window 12 is unbeaten in [18022.51, 43160.74]
    mnt6753_G2::fixed_base_exp_window_table.push_back(18023);
    // window 13 is unbeaten in [43160.74, 149743.32]
    mnt6753_G2::fixed_base_exp_window_table.push_back(43161);
    // window 14 is never the best
    mnt6753_G2::fixed_base_exp_window_table.push_back(0);
    // window 15 is unbeaten in [149743.32, 551844.13]
    mnt6753_G2::fixed_base_exp_window_table.push_back(149743);
    // window 16 is unbeaten in [551844.13, 1041827.91]
    mnt6753_G2::fixed_base_exp_window_table.push_back(551844);
    // window 17 is unbeaten in [1041827.91, 1977371.53]
    mnt6753_G2::fixed_base_exp_window_table.push_back(1041828);
    // window 18 is unbeaten in [1977371.53, 3703619.51]
    mnt6753_G2::fixed_base_exp_window_table.push_back(1977372);
    // window 19 is unbeaten in [3703619.51, 7057236.87]
    mnt6753_G2::fixed_base_exp_window_table.push_back(3703620);
    // window 20 is unbeaten in [7057236.87, 38554491.67]
    mnt6753_G2::fixed_base_exp_window_table.push_back(7057237);
    // window 21 is never the best
    mnt6753_G2::fixed_base_exp_window_table.push_back(0);
    // window 22 is unbeaten in [38554491.67, inf]
    mnt6753_G2::fixed_base_exp_window_table.push_back(38554492);

    /* pairing parameters */
    mnt6753_ate_loop_count = bigint_q("204691208819330962009469868104636132783269696790011977400223898462431810102935615891307667367766898917669754470400");
    mnt6753_ate_is_loop_count_neg = false;
    mnt6753_final_exponent = bigint<6*mnt6753_q_limbs>("129119521415595396014710306456032421075529786121916339618043051454538645105373777417137765707049510513015090026587997279208509759539952171373399816556184658054246934445122434683712249758515142075912382855071692226902812699306965286452865875620478620415339135536651578138124630852841411245063114044076427626521354349718502952988285309849333541213630352110932043828698936614474460281448819530109126473106492442797180252857193080048552501189491359213783058841481431978392771722128135286229420891567559544903231970966039315305865230923024300814788334307759652908820805819427293129932717325550045066338621261382334584633469485279042507653112873505613662346162595624798718660978835342384244182483671072189980911818690903244207181753883232560300278713216908336381030175242331281836803196022816489406715804002685525498662502919760346302653911463614694097216541218340832160715975576449518733830908486041613391828183354500089193133793376316346927602330584336604894214847791219714282509301093232896394808735738348953422584365914239193758384912179069975047674736700432948221178135004609440079320720726286913134205559121306917942266019404840960000");
    mnt6753_final_exponent_last_chunk_abs_of_w0 = bigint_q("204691208819330962009469868104636132783269696790011977400223898462431810102935615891307667367766898917669754470400");
    mnt6753_final_exponent_last_chunk_is_w0_neg = false;
    mnt6753_final_exponent_last_chunk_w1 = bigint_q("1");
}

} // libff
